# Лекция: Data Transfer Object (DTO) в Java

Data Transfer Object (DTO) - это объект, который используется для передачи данных между подсистемами приложения. DTO не содержит никакой бизнес-логики, только поля и методы доступа (геттеры и сеттеры).

## Создание DTO

DTO - это простой Java-класс с полями и методами доступа.

```java
public class UserDto {
    private String name;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
```

## Использование DTO

DTO обычно используются для передачи данных в API или между слоями приложения.

```java
UserDto userDto = new UserDto();
userDto.setName("John Doe");
userDto.setEmail("john.doe@example.com");

// передача userDto в API или другой слой приложения
```

---

# Практические задания

1. **Создайте класс DTO `ProductDto` с полями `id`, `name` и `price`.** (Сложность: 1/5)
```java
public class ProductDto {
    private int id;
    private String name;
    private double price;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}
```

2. **Создайте объект `ProductDto` и установите его поля.** (Сложность: 1/5)
```java
ProductDto productDto = new ProductDto();
productDto.setId(1);
productDto.setName("Apple");
productDto.setPrice(0.99);
```

3. **Создайте класс DTO `OrderDto` с полями `id`, `userId` и `products` (список `ProductDto`).** (Сложность: 2/5)
```java
public class OrderDto {
    private int id;
    private int userId;
    private List<ProductDto> products;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public List<ProductDto> getProducts() {
        return products;
    }

    public void setProducts(List<ProductDto> products) {
        this.products = products;
    }
}
```

4. **Создайте объект `OrderDto`, установите его поля и добавьте в него `ProductDto` из предыдущего задания.** (Сложность: 2/5)
```java
OrderDto orderDto = new OrderDto();
orderDto.setId(1);
orderDto.setUserId(1);
orderDto.setProducts(Arrays.asList(productDto));
```

5. **Создайте класс DTO `UserDto` с полями `id`, `name`, `email` и `orders` (список `OrderDto`). Создайте объект `UserDto`, установите его поля и добавьте в него `OrderDto` из предыдущего задания.** (Сложность: 3/5)
```java
public class UserDto {
    private int id;
    private String name;
    private String email;
    private List<OrderDto> orders;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List<OrderDto> getOrders() {
        return orders;
    }

    public void setOrders(List<OrderDto> orders) {
        this.orders = orders;
    }
}

UserDto userDto = new UserDto();
userDto.setId(1);
userDto.setName("John Doe");
userDto.setEmail("john.doe@example.com");
userDto.setOrders(Arrays.asList(orderDto));
```